from flask import Flask
from settings import dict_config

from flask_migrate import Migrate
'''
创建app的函数  参数是代表运行的类型  1、开发环境  2、生产环境
'''

def create_app(run_type):
    app = Flask(__name__)

    #加载整个项目的配置
    app.config.from_object(dict_config.get(run_type))

    #初始化 SQLAlchemy
    from comment.modules import db
    db.init_app(app)

    #初始化redis
    from comment.utils.Financial_Redis import fr
    fr.init_app(app)

    #初始化日志处理的工具
    from comment.utils.Financial_Logging import create_logger
    create_logger(app)

    # 初始化Migrate  可以执行命令  1、flask db init   2、flask db migrate  3、flask db upgrade
    #直接执行以上的三个命令  需要默认的flask项目入口文件  需要设置环境变量
    Migrate(app,db)

    #注册token认证的请求钩子
    from comment.utils.request_auth import jwt_request_auth
    app.before_request(jwt_request_auth)#注册钩子函数

    #注册蓝图
    from financial.resources.user import user_bp
    app.register_blueprint(user_bp)
    from financial.resources.letter import letter_bp
    app.register_blueprint(letter_bp)
    from financial.resources.card import card_bp
    app.register_blueprint(card_bp)
    from financial.resources.product import product_bp
    app.register_blueprint(product_bp)
    return app